home *** CD-ROM | disk | FTP | other *** search
- Subject: control ttys again
- Date: Tue, 15 Mar 94 7:28:56 CET
- From: Juergen Lock <nox@jelal.north.de>
- Message-Id: <9403150629.AA00350@jelal.north.de>
-
- hello
-
- yes dosmem.c again... and set_auxhandle (Bconmap) did not ++tty->use_cnt
- wich was another reason for zeroed tty pgroups.
-
- now if the modem devices could turn off local mode and send signals
- immediately... :)
-
- cheers
- Juergen
-
- Index: dosmem.c
- @@ -748,6 +748,7 @@
- }
- }
-
- +#if 0
- /* release the controlling terminal, if we're a process group leader */
- fp = curproc->handle[-1];
- if (fp && is_terminal(fp) && curproc->pgrp == curproc->pid) {
- @@ -755,6 +756,37 @@
- if (curproc->pgrp == tty->pgrp)
- tty->pgrp = 0;
- }
- +#else
- +/* release the controlling terminal, if we're the last member of this pgroup */
- + fp = curproc->control;
- + if (fp && is_terminal(fp)) {
- + struct tty *tty = (struct tty *)fp->devinfo;
- + int pgrp = curproc->pgrp;
- +
- + if (pgrp == tty->pgrp) {
- + PROC *p;
- + FILEPTR *pfp;
- +
- + if (tty->use_cnt > 1) {
- + for (p = proclist; p; p = p->gl_next) {
- + if (p->pgrp == pgrp && p != curproc &&
- + ((pfp = p->control)) &&
- + pfp->fc.index == fp->fc.index &&
- + pfp->fc.dev == fp->fc.dev)
- + goto found;
- + }
- + } else {
- + for (p = proclist; p; p = p->gl_next) {
- + if (p->pgrp == pgrp && p != curproc &&
- + p->control == fp)
- + goto found;
- + }
- + }
- + tty->pgrp = 0;
- + }
- +found:
- + }
- +#endif
-
- /* close all files */
- for (i = MIN_HANDLE; i < MAX_OPEN; i++) {
- Index: biosfs.c
- @@ -1885,6 +1885,7 @@
-
- f = new_fileptr();
- if (f) {
- + struct tty *tty;
- f->links = 1;
- f->flags = O_RDWR;
- f->pos = 0;
- @@ -1900,6 +1901,16 @@
- f->dev = b->device;
- if (b->device != &fakedev)
- f->devinfo = (long)b->tty;
- +#if 1
- +/* don't close and reopen the same device again
- + */
- + if (p->aux && p->aux->fc.fs == &bios_filesys &&
- + p->aux->fc.index == f->fc.index) {
- + f->links = 0;
- + dispose_fileptr(f);
- + return 1;
- + }
- +#endif
- goto found_device;
- }
- }
- @@ -1911,6 +1922,16 @@
- dispose_fileptr(f);
- return 0;
- }
- +/* special code for opening a tty */
- + if ((tty = (struct tty *)f->devinfo)) {
- + extern struct tty default_tty; /* in tty.c */
- +
- + /* first open for this device? */
- + if (tty->use_cnt == 0) {
- + *tty = default_tty;
- + }
- + tty->use_cnt++;
- + }
- } else {
- /* no memory! use the fake FILEPTR we
- * set up in biosfs_init
- --
- J"urgen Lock / nox@jelal.north.de / UUCP: ..!uunet!unido!uniol!jelal!nox
- ...ohne Gewehr
- PGP public key fingerprint = 8A 18 58 54 03 7B FC 12 1F 8B 63 C7 19 27 CF DA
-